Verilog初级教程(8)Verilog中的assign语句 |
您所在的位置:网站首页 › vivado reg变量 › Verilog初级教程(8)Verilog中的assign语句 |
博文目录
写在前面正文赋值语法reg类型变量赋值隐性连续赋值组合逻辑设计举例说明
参考资料交个朋友
写在前面
本系列相关博文链接: Verilog初级教程(7)Verilog模块例化以及悬空端口的处理 Verilog初级教程(6)Verilog模块与端口 Verilog初级教程(5)Verilog中的多维数组和存储器 Verilog初级教程(4)Verilog中的标量与向量 Verilog初级教程(3)Verilog 数据类型 Verilog初级教程(2)Verilog HDL的初级语法 Verilog初级教程(1)认识 Verilog HDL 芯片设计抽象层及其设计风格 Verilog以及VHDL所倡导的的代码准则 FPGA/ASIC初学者应该学习Verilog还是VHDL? 个人微信公众号: FPGA LAB 个人博客首页 注:学习交流使用! 正文wire类型的信号需要连续赋值。例如,考虑一根电线用于连接面包板上的元件。只要将+5V电池施加在电线的一端,连接在电线另一端的元件就会得到所需的电压。 在Verilog中,这个概念是通过赋值语句(assign)来实现的,在赋值语句中,任何线或其他类似线的数据类型都可以用一个值来连续驱动,这个值可以是常数,也可以是一组信号组成的表达式。 赋值语法赋值语法以关键字assign开头,后面是信号名,可以是单个信号,也可以是不同信号网的连接。驱动强度和延迟是可选的,主要用于数据流建模,而不是综合到实际硬件中。右侧的表达式或信号被分配给左侧的网或网的表达式。 语法结构如下: assign = [drive_strength] [delay]延迟值对于指定门的延迟很有用,并用于模拟实际硬件中的时序行为,因为该值决定了何时应该用评估值分配网。 使用 assign 语句时, 需要遵循一些规则: LHS(左值) 应该始终是wire类型的标量或向量网络, 或者标量或矢量网络的串联, 而绝对不能是reg类型的标量或矢量寄存器。RHS 可以包含标量或向量寄存器以及函数调用。只要 RHS 上的任何操作数的值发生变化, LHS 就会使用新值进行更新。assign 语句也称为连续赋值, 并且始终处于活动状态例如:
reg类型的变量不能使用assign进行连续赋值,这是因为reg类型的变量可以存储数据,并且不需要连续驱动。我们只能在initial以及always块内对reg类型变量进行赋值。 隐性连续赋值当使用assign给wire类型的网络赋值时,称为显示连续赋值,如果在定义的时候就对其连续赋值,称为隐形连续赋值。 wire [1:0] a; assign a = x & y; // Explicit assignment wire [1:0] a = x & y; // Implicit assignment隐形连续赋值在Verilog中是被允许的。 组合逻辑设计assign语句常用于组合逻辑设计,如下的电路图:
其RTL硬件原理图为: 行为仿真: 半加器设计 Verilog描述为: module ha ( input a, b, output sum, cout); assign sum = a ^ b; assign cout = a & b; endmodule对应的RTL原理图为: tb文件: module tb; // Declare testbench variables reg a, b; wire sum, cout; integer i; // Instantiate the design and connect design inputs/outputs with ha u0 ( .a(a), .b(b), .sum(sum), .cout(cout)); initial begin // At the beginning of time, initialize all inputs of the design // to a known value, in this case we have chosen it to be 0. a |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |